@贝壳儿
2年前 提问
1个回答
CRLF注入原理是什么?
齐士忠
2年前
CRLF注入又叫HTTP响应拆分/截断(HTTP Response Splitting)简称HRS。HRS漏洞存在的前提是 :url当中输入的字符会影响到文件,比如在重定位当中可以尝试使用%0d%0a作为CRLF。一般网站会在HTTP头中加上Location: http://baidu.com
的方式来进行302跳转,所以我们能控制的内容就是Location:后面的XXX网址,对这个地址进行污染。
假设服务端(PHP)的处理方式:
if($_COOKIE("security_level") == 1)
{
header("Location: ". $_GET['url']);
exit;
}
代码意思是说当条件满足时,将请求包中的url参数值拼接到Location字符串中,并设置成响应头发送给客户端。
此时服务器端接收到的url参数值是我们修改后的:
http://baidu.com/xxx%0a%0dSet-Cookie: test123=123
在url参数值拼接到Location字符串中,设置成响应头后,响应头就会看到:
Set-Cookie: test123=123
要避免http响应截断,需要注意以下几点:
对用户的数据进行合法性校验,对特殊的字符进行编码,如<、>、’、”、CR、LF等,限制用户输入的CR和LF,或者对CR和LF字符正确编码后再输出,以防止注入自定义HTTP头。
创建安全字符白名单,只接受白名单中的字符出现在HTTP响应头文件中。
在将数据传送到http响应头之前,删除所有的换行符。